#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>

#define BUFSIZE	128

int main(int argc, char *argv[])
{
	int fd1;
	char buf[BUFSIZE] = {0};

	if (argc < 2)
		return 1;

	fd1 = open(argv[1], O_WRONLY | O_CREAT | O_APPEND, 0666); // 以追加写的方式打开文件，没有则创建

	if (-1 == fd1) {
		// 打印失败的原因
		printf("errno:%d, err_string:%s\n", errno, strerror(errno));
		perror("open()函数调用失败");
		return 1;
	}

    /* 标准输出重定向 */
	close(1); // 将标准输出文件关闭
	// 复制一个文件描述符 fd1，返回一个新的文件描述符。新的文件描述符是当前未使用的最小文件描述符。此处是1
    // 新旧文件描述符共享相同的文件偏移量和文件状态标志。
    dup(fd1); 

    //dup2(fd1, 1); // 上面的两步的等效写法，该方法具有原子性
    
	printf("hello world\n"); // 不在输出到终端，而是写到fd1文件
	
	return 0;
}



